package com.city.service.report;

import com.city.domain.city.CityTown;
import com.city.domain.city.CityVillage;
import com.city.domain.report.*;

import java.util.List;

/**
 * @deprecation: 上报服务
 * @email: leichuqiao@126.com
 * @author: 雷楚桥
 * @date: 2018/7/23 13:22
 */
public interface ReportService {

    /**
     * @deprecation 查找所有的乡镇
     * @author 雷楚桥
     * @date 2018/7/23 13:23
     */
    List<CityTown> findAllCityTown();


    /*
     * @Author 何平
     * @Description //TODO 查找本月的数据
     * @Date 20:38 2018/8/24
     * @Param [schedule, year, month]
     * @return java.lang.Integer
     **/
    Integer findAllByScheduleAndMonth(Integer schedule,Integer year,Integer month);
    /*
     * @Author 何平
     * @Description //TODO 查找本日的数据
     * @Date 20:14 2018/8/24
     * @Param [schedule]
     * @return java.lang.Integer
     **/
    Integer findAllByScheduleAndDay(Integer schedule);
    /**
     * @Author 何平
     * @Description //TODO 查找某年所有数据
     * @Date 15:10 2018/8/24
     * @Param [schedule, year]
     * @return java.lang.Integer
     **/
    Integer findAllByScheduleAndYear(Integer schedule,Integer year);

    /**
     * @Author 何平
     * @Description //TODO 查找前十上报类型数目
     * @Date 11:16 2018/8/24
     * @Param []
     * @return java.util.List<java.lang.String>
     **/

    String[] findAllByTypeBig();

    /**
     * @Author 何平
     * @Description //TODO 查找对应年份某个部门的数据情况
     * @Date 15:49 2018/8/19
     * @Param [year, branch_id]
     * @return java.util.List<java.lang.String>
     **/
    List<String> findAllByYearAndBranchIdAndSchedule(Integer year,Integer branch_id,Integer schedule);

    /**
     * @Author 何平
     * @Description //TODO 查找对应年份某个城市的数据情况
     * @Date 10:49 2018/8/19
     * @Param [year, townId]
     * @return java.lang.Integer
     **/
    Integer findAllByYearAndTownId(Integer year,Integer townId);



    /**
     * @Author 何平
     * @Description //TODO 查找所有年份
     * @Date 16:40 2018/8/18
     * @Param []
     * @return java.util.List<java.lang.Integer>
     **/
    List<Integer> findAllYear();


    /*
     * @Author 何平
     * @Description //TODO 查找对应年份的不同城市的不同状态信息
     * @Date 19:16 2018/8/24
     * @Param [year, schedule, townId]
     * @return java.lang.Integer
     **/
    Integer findAllByYearAndScheduleAndTownId(Integer year,Integer schedule,Integer townId);
    /*
     * @Author 何平
     * @Description //TODO 查找对应年份的不同数据
     * @Date 15:38 2018/8/24
     * @Param [year, schedule]
     * @return java.util.List<java.lang.Integer>
     **/
    List<String> findAllByYearAndSchedule(Integer year,Integer schedule);

    /**
     * @Author 何平
     * @Description //TODO 查找对应年份的所有月份数据
     * @Date 17:07 2018/8/18
     * @Param [year]
     * @return java.util.Map<java.lang.Integer,java.lang.Integer>
     **/
    List<String> findAllByYear(Integer year);


   /*
    * @Author 何平
    * @Description //TODO 根据id值范围查找数据
    * @Date 10:55 2018/8/17
    * @Param [left, right]
    * @return java.util.List<com.city.domain.report.CtReport>
    **/
    List<CtReport> findAllByIdLimit(Integer left,Integer right);
    
    /**
     * @Author 何平
     * @Description //TODO 查找所有上报信息,根据区域
     * @Date 14:09 2018/8/11
     * @Param []
     * @return java.lang.Integer
     **/
    Integer findAllByTownId(Integer town);
    
    /**
     * @Author 何平
     * @Description //TODO 查找不同状态的上报信息
     * @Date 14:25 2018/8/11
     * @Param [status]
     * @return java.lang.Integer
     **/
    Integer findAllByScheduleAndTownId(Integer status,Integer town);


    /**
     * @Author 何平
     * @Description //TODO 查找所有上报信息，根据部门
     * @Date 16:08 2018/8/12
     * @Param [branchId]
     * @return java.lang.Integer
     **/
    Integer findAllByBranchId(Integer branchId);
    /**
     * @Author 何平
     * @Description //TODO 查找某个部门的上报信息
     * @Date 15:38 2018/8/12
     * @Param [branchId, schedule]
     * @return java.lang.Integer
     **/
    Integer findAllByBranchIdAndSchedule(Integer branchId,Integer schedule);

    /**
     * @deprecation 根据乡镇id得到这个乡镇下面的所有村庄
     * @params townId Integer 乡镇id
     * @return villageList
     * @author 雷楚桥
     * @date 2018/7/23 14:02
     */
    List<CityVillage> findCityVillageByTownId(Integer townId);

    /**
     * @deprecation 保存上报信息
     * @param ctReport CtReport 需要保存的上报信息
     * @return CtReport
     * @author 雷楚桥
     * @date 2018/7/23 17:52
     */
    CtReport saveCtReport(CtReport ctReport);


    /**
     * @deprecation 修改上报案件进度
     * @param  id Integer 保存id
     * @param  schedule Integer 案件进度
     * @return CtReport
     * @author 雷楚桥
     * @date 2018/7/27 16:15
     */
    CtReport saveCtReport(Integer id, Integer schedule);

    /**
     * @deprecation 查找事件
     * @param categoryId Integer 上报类别
     * @param parent Integer 需要查询的上级目录
     * @return CtEventList
     * @author 雷楚桥
     * @date 2018/7/25 14:38
     */
    List<CtEvent> findAllCtEventByCategoryIdAndParent(Integer categoryId, Integer parent);


    /**
     * @deprecation 查询所有的上报记录
     * @return CtReportList
     * @author 雷楚桥
     * @date 2018/7/25 20:10
     */
    List<CtReport> findAllReport();

    /**
     * @deprecation 根据类别id查询到类别entity
     * @param categoryId Integer 类别id
     * @return CtCategory
     * @author 雷楚桥
     * @date 2018/7/26 12:51
     */
    CtCategory findCategoryById(Integer categoryId);

    /**
     * @deprecation 根据案件类别id查找类别
     * @param typeBig Integer 类别id
     * @return CtEvent
     * @author 雷楚桥
     * @date 2018/7/26 12:55
     */
    CtEvent findEventById(Integer typeBig);

    /**
     * @deprecation 根据乡镇id查找乡镇
     * @param townId Integer 乡镇id
     * @return CityTown
     * @author 雷楚桥
     * @date 2018/7/26 12:58
     */
    CityTown findTownById(Integer townId);


    /**
     * @deprecation 根据村庄id查找村庄
     * @param villageId Integer 村庄id
     * @return CityVillage
     * @author 雷楚桥
     * @date 2018/7/26 13:00
     */
    CityVillage findVillageById(Integer villageId);

    /**
     * @deprecation 根据id查找上报记录
     * @param id Integer 上报id
     * @return CtReport
     * @author 雷楚桥
     * @date 2018/7/26 15:03
     */
    CtReport findReportById(Integer id);

    /**
     * @deprecation 根据上报id查询上报的历史记录
     * @param reportId Integer 上报id
     * @return CtReportList
     * @author 雷楚桥
     * @date 2018/7/28 15:27
     */
    List<CtReport> findAllReportByReportId(Integer reportId);


    /**
     * @deprecation 根据级别查询该级别的所有专业部门
     * @param parent Integer 级别
     * @return CtBranchList
     * @author 雷楚桥
     * @date 2018/7/29 13:21
     */
    List<CtBranch> findAllBranchByParent(Integer parent);


    /**
     * @deprecation 将案件进行派遣
     * @param reportId Integer 案件id
     * @param branchId Integer 专业部门id
     * @param schedule Integer 进度
     * @author 雷楚桥
     * @date 2018/7/29 15:08
     */
    void reportDispatchBranch(Integer reportId, Integer branchId, Integer schedule);



    /**
     * @deprecation 根据专业部门获取部门
     * @param branchId Integer 部门id
     * @return String
     * @author 雷楚桥
     * @date 2018/7/29 16:55
     */
    CtBranch findBranchById(Integer branchId);


    /**
     * @deprecation 将上报案件进行删除
     * @param id Integer 案件id
     * @return CtReport
     * @author 雷楚桥
     * @date 2018/7/29 17:10
     */
    void reportDelById(Integer id);


    /**
     * @deprecation 根据进度状况查询上报列表
     * @param left Integer 大于左侧
     * @param right Integer 小于右侧
     * @return CtReportList
     * @author 雷楚桥
     * @date 2018/7/29 18:02
     */
    List<CtReport> findAllReportByScheduleLimit(Integer left, Integer right);
    List<CtReport> findAllReportByScheduleByUserId(Integer left, Integer right,Integer branchId);


    /**
     * @deprecation 检查是否被督办
     * @param id Integer 案件id
     * @return boolean
     * @author 雷楚桥
     * @date 2018/7/30 10:23
     */
    boolean checkDoBan(Integer id);

    
    /**
     * @deprecation 检测是否被督办
     * @param reportId Integer 案件id
     * @param manId Integer 督办人id
     * @return boolean
     * @author 雷楚桥
     * @date 2018-08-13 15:40
     */
    boolean checkDoBan(Integer reportId,Integer manId);

    /**
     * @deprecation 取消督办
     * @param id Integer 案件id
     * @return CtReport
     * @author 雷楚桥
     * @date 2018/7/30 10:57
     */
    CtReport cancelDoBan(Integer id);

    /**
     * @deprecation 修改一条督办
     * @param doBan CtDoBan 是实例
     * @return CtDoBan
     * @author 雷楚桥
     * @date 2018-08-13 14:49
     */
    CtDoBan saveDoBan(CtDoBan doBan);

    /**
     * @deprecation 根据案件id,查询所有的督办记录
     * @param reportId Integer 案件id
     * @return List
     * @author 雷楚桥
     * @date 2018-08-13 16:45
     */
    List<CtDoBan> findAllDoBanByReportId(Integer reportId);

    /**
     * @deprecation 根据案件id,查询所有的督办记录[根据督办记录的时间倒序]
     * @param reportId Integer 案件id
     * @return List
     * @author 雷楚桥
     * @date 2018-08-13 16:45
     */
    List<CtDoBan> findAllDoBanByReportIdOrderByTimeDesc(Integer reportId);

    /**
     * @deprecation 查询所有督办的light等于零的督办
     * @return List
     * @author 雷楚桥
     * @date 2018-08-14 15:18
     */
    List<CtDoBan> findAllDoBanByLightEqZero();

    /**
     * @deprecation 更新一个案卷回撤
     * @param back CtBack 一条案卷回撤
     * @return CtBack
     * @author 雷楚桥
     * @date 2018-08-22 16:15
     */
    CtBack saveBack(CtBack back);

    /**
     * @deprecation 创建一个民情日记
     * @param copnote CtCopnote 内容
     * @return CtCopnote
     * @author 雷楚桥
     * @date 2018-08-24 14:52
     */
    CtCopnote saveCopnote(CtCopnote copnote);
    
    /**
     * @deprecation 查找所有民情日记
     * @return CtCopnoteList
     * @author 雷楚桥
     * @date 2018-09-01 10:06
     */
    List<CtCopnote> findAllCopnote();

    /**
     * @deprecation 查找一个民情日记
     * @param id Integer id
     * @return CtCopnote
     * @author 雷楚桥
     * @date 2018-09-01 10:11
     */
    CtCopnote findCopnoteById(Integer id);

    /**
     * @deprecation 根据部门查找所有的上报内容
     * @param branchId Integer 部门id
     * @return List
     * @author 雷楚桥
     * @date 2018-09-02 17:51
     */
    List<CtReport> findAllReportByBranchId(Integer branchId);

    List<CtBranch> findAll();


    /**
     * @author  王宇
     * @date 2018/9/9
     * @description  派遣人员
     */
    void dispatchPeople(Integer reportId, Integer peopleId, Integer schedule);

    /**
     * @author  王宇
     * @date 2018/9/9
     * @description  返工
     */
    void reWork(Integer reportId, Integer isrework, Integer schedule);

    /**
     * @author  王宇
     * @date 2018/9/18
     * @description  案件回撤
     */
    void caseBack(Integer reportId, Integer isrework, Integer schedule);

    /**
     * @author  王宇
     * @date 2018/9/9
     * @description  审核通过 并记录审核人员
     */
    void checkPass(Integer reportId, Integer hechaId, Integer schedule);

    /**
     * @author  王宇
     * @date 2018/9/9
     * @description  设置结案人
     */
    void checkAccepted(Integer reportId, Integer finishId, Integer schedule);

    /**
     * @author  王宇
     * @date 2018/9/11
     * @description  切换督办状态
     */
    void updateDoBan(Integer doban ,Integer id);

    /**
     * @author  王宇
     * @date 2018/9/11
     * @description  更新截止时间
     */
    void updateEndTime(String endTime,Integer id);

    /**
     * @author  王宇
     * @date 2018/9/11
     * @description  更新是否按时完成
     */
    void updateIsOntime(Integer id);
}
